"""
Case Type   : 系统内部使用工具
Case Name   : 使用正确实例名是否删除成功，路径下是否有残留
Create At   : 2021/02/02
Owner       : opentestcase015
Description :
    1.新建目录
    2.进行初始化
    3.在备份路径内初始化一个新的备份实例
    4.在备份路径backup-path内删除指定实例相关的备份内容
    5.查看备份路径下是否有残留
    6.删除新建目录
Expect      :
    1.新建目录成功
    2.进行初始化成功
    3.在备份路径内初始化一个新的备份实例
    4.在备份路径backup-path内删除指定实例相关的备份内容成功
    5.备份路径下有相关文件夹，但backups为空
    6.删除新建目录成功
History     :
    modified by l1azzzy at 2024/12/5:优化提示信息，以及逻辑，适配7.0.0-RC1版本
"""

import unittest

from testcase.utils.Constant import Constant
from testcase.utils.Logger import Logger
from yat.test import Node
from yat.test import macro

LOG = Logger()


class SystemInternalTools(unittest.TestCase):
    def setUp(self):
        LOG.info('-------------------this is setup--------------------')
        LOG.info('-Opengauss_Function_Tools_Gs_Probackup_Case0015开始执行-')
        self.constant = Constant()
        self.PrimaryNode = Node('PrimaryDbUser')

    def test_system_internal_tools(self):
        LOG.info('---------step1 新建备份目录--------------')
        init_cmd = f"mkdir {macro.DB_BACKUP_PATH}/testdir;"
        LOG.info(init_cmd)
        init_msg = self.PrimaryNode.sh(init_cmd).result()
        LOG.info(init_msg)
        self.assertNotIn(self.constant.SQL_WRONG_MSG[1], init_msg)

        LOG.info('----------step2 进行初始化------------------')
        init_cmd = f"source {macro.DB_ENV_PATH};gs_probackup init -B " \
            f"{macro.DB_BACKUP_PATH}/testdir;"
        LOG.info(init_cmd)
        init_msg = self.PrimaryNode.sh(init_cmd).result()
        LOG.info(init_msg)
        self.assertIn(self.constant.init_success, init_msg)

        LOG.info('-----step3 在备份路径内初始化一个新的备份实例---')
        init_cmd = f"source {macro.DB_ENV_PATH};" \
            f"gs_probackup add-instance -B {macro.DB_BACKUP_PATH}/testdir " \
            f"-D {macro.DB_INSTANCE_PATH} --instance=pro1;"
        LOG.info(init_cmd)
        init_msg = self.PrimaryNode.sh(init_cmd).result()
        LOG.info(init_msg)
        self.assertIn("'pro1' " + self.constant.init_success, init_msg)

        LOG.info('-step4 在备份路径backup-path内删除指定实例相关的备份内容-')
        del_cmd = f"source {macro.DB_ENV_PATH};" \
            f"gs_probackup del-instance -B {macro.DB_BACKUP_PATH}/testdir " \
            f" --instance=pro1;"
        LOG.info(del_cmd)
        del_msg = self.PrimaryNode.sh(del_cmd).result()
        LOG.info(del_msg)
        self.assertIn(self.constant.del_success, del_msg)

        LOG.info('-----------step5 查看备份路径下是否有残留------------')
        check_cmd = f"ls {macro.DB_BACKUP_PATH}/testdir/backups;"
        LOG.info(check_cmd)
        check_msg = self.PrimaryNode.sh(check_cmd).result()
        LOG.info(check_msg)
        self.assertIn('', check_msg)

    def tearDown(self):
        LOG.info('------------------this is tearDown--------------------')
        LOG.info('---------------step6 删除新建目录-----------------')
        clear_cmd = f"rm -rf {macro.DB_BACKUP_PATH}/testdir;"
        LOG.info(clear_cmd)
        clear_msg = self.PrimaryNode.sh(clear_cmd).result()
        LOG.info(clear_msg)
        LOG.info('-Opengauss_Function_Tools_Gs_Probackup_Case0015执行完成-')
